home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / util / cli / APT-WBOpen11.lha / source / WO.s
Text File  |  2000-08-30  |  5KB  |  301 lines

  1. ;APS000000000000000000000F5800000000000000000000000000000000000000000000000000000000
  2.  
  3. ;Written with Asm-Pro v1.16, might need some small modifications before it
  4. ;assembles with other progs..
  5. ;other assemblers..
  6. ;
  7. ;Done by Point/Apathy <s991641@stud.nhh.no>
  8.  
  9.  
  10.  
  11.     incdir    "include:"
  12.     include    "all_lvos.i"
  13.     include    "dos/dosextens.i"
  14.     include    "exec/exec.i"
  15.     include    "workbench/workbench.i"
  16.     include    "libraries/asl.i"
  17.     
  18.  
  19.     section    wbopen_code,code
  20.  
  21.  
  22. wbopen_skip
  23.     bra.s    wbopen
  24.     dc.b    "$VER: WBOpen v1.1 by Alex Gustavsen aka Point/Apathy, 29-Aug-2000",0
  25.  
  26.     cnop    0,4
  27.  
  28. wbopen    movem.l    d1-a6,-(sp)
  29.     bsr.s    wo_nicestart
  30.     bne.w    wo_rts
  31.     bsr.s    wo_openlibs
  32.     bne.w    wo_exit_
  33.  
  34.     bsr.w    main
  35.  
  36. wo_exit_
  37.     bsr.w    wo_errormsg
  38.     bsr.w    wo_closelibs
  39. wo_rts    movem.l    (sp)+,d1-a6
  40.     rts
  41.  
  42.  
  43.  
  44.  
  45. wo_nicestart
  46.     movem.l    d1/a0-a2/a6,-(sp)
  47.     move.l    4.w,a6
  48.     move.l    a6,_SysBase
  49.     sub.l    a1,a1
  50.     jsr    _LVOFindTask(a6)
  51.     move.l    d0,a2
  52.     move.l    d0,thistask
  53.     tst.l    pr_CLI(a2)
  54.     bne.s    wb_nicestart.ok
  55.     lea    pr_MsgPort(a2),a0
  56.     jsr    _LVOWaitPort(a6)
  57.     lea    pr_MsgPort(a2),a0
  58.     jsr    _LVOGetMsg(a6)
  59.     move.l    d0,a1
  60.     jsr    _LVOReplyMsg(a6)
  61.     moveq.l    #RETURN_ERROR,d0
  62.     bra.s    wb_nicestart.rts
  63. wb_nicestart.ok
  64.     moveq.l    #0,d0
  65. wb_nicestart.rts
  66.     movem.l    (sp)+,d1/a0-a2/a6
  67.     rts
  68.     
  69.  
  70. wo_openlibs
  71.     movem.l    d1/a0-a1/a6,-(sp)
  72.     move.l    _SysBase,a6
  73.     lea    dos_name,a1
  74.     moveq.l    #36,d0
  75.     jsr    _LVOOpenLibrary(a6)
  76.     tst.l    d0
  77.     beq.s    wo_openlibs.failed
  78.     move.l    d0,dos_base
  79.     move.l    #wblib_err,errormsg
  80.     lea    wb_name,a1
  81.     moveq.l    #44,d0
  82.     jsr    _LVOOpenLibrary(a6)
  83.     tst.l    d0
  84.     beq.s    wo_openlibs.failed
  85.     move.l    #0,errormsg
  86.     move.l    d0,wb_base
  87.     moveq.l    #0,d0
  88. wo_openlibs.rts
  89.     movem.l    (sp)+,d1/a0-a1/a6
  90.     rts
  91.  
  92. wo_openlibs.failed
  93.     move.l    #RETURN_ERROR,d0
  94.     bra.s    wo_openlibs.rts
  95.  
  96. wo_errormsg
  97.     movem.l    d0-d1/a0-a1/a6,-(sp)
  98.     tst.l    errormsg
  99.     beq.s    wo_errormsg.rts
  100.     move.l    dos_base,a6
  101.     move.l    errormsg,d1
  102.     jsr    _LVOVPrintf(a6)
  103. wo_errormsg.rts
  104.     movem.l    (sp)+,d0-d1/a0-a1/a6
  105.     rts
  106.  
  107. wo_closelibs
  108.     movem.l    d0-d1/a0-a1/a6,-(sp)
  109.     move.l    _SysBase,a6
  110.     move.l    dos_base,a1
  111.     tst.l    a1
  112.     beq.s    wo_closelibs.rts
  113.     jsr    _LVOCloseLibrary(a6)
  114.     move.l    wb_base,a1
  115.     tst.l    a1
  116.     beq.s    wo_closelibs.rts
  117.     jsr    _LVOCloseLibrary(a6)
  118.     move.l    asl_base,a1
  119.     tst.l    a1
  120.     beq.s    wo_closelibs.rts
  121.     jsr    _LVOCloseLibrary(a6)
  122. wo_closelibs.rts
  123.     movem.l    (sp)+,d0-d1/a0-a1/a6
  124.     rts
  125.  
  126. ;-------_strlength:
  127. ;    input    a0-strptr
  128. ;    output    d0-length
  129. _strlength
  130.     move.l    a0,-(sp)
  131.     moveq.l    #-1,d0
  132. _strlength.loop
  133.     addq.l    #1,d0
  134.     tst.b    (a0)+
  135.     bne.s    _strlength.loop
  136.     move.l    (sp)+,a0
  137.     rts
  138.  
  139. ;-------_bytecopy:
  140. ;    input    a0-src
  141. ;        a1-dest
  142. ;        d0-length
  143. _bytecopy
  144.     movem.l    d0/a0-a1,-(sp)
  145.     subq.l    #1,d0
  146.     blt.s    _bytecopy.rts
  147. _bytecopy.loop
  148.     move.b    (a0)+,(a1)+
  149.     dbra    d0,_bytecopy.loop
  150. _bytecopy.rts
  151.     movem.l    (sp)+,d0/a0-a1
  152.     rts
  153.  
  154. main    movem.l    d0-a6,-(sp)
  155.     move.l    dos_base,a6
  156.     move.l    #argtemplate,d1
  157.     move.l    #argarray,d2
  158.     moveq.l    #0,d3
  159.     jsr    _LVOReadArgs(a6)
  160.     tst.l    d0
  161.     beq.w    main.failed
  162.     move.l    d0,rdargs
  163.     lea    argarray,a0
  164.     tst.l    (a0)
  165.     bne.w    main.open_it        ;name in a0
  166.     move.l    _SysBase,a6
  167.     move.l    #asllib_err,errormsg
  168.     lea    asl_name,a1
  169.     moveq.l    #36,d0
  170.     jsr    _LVOOpenLibrary(a6)
  171.     tst.l    d0
  172.     beq.w    main.failed
  173.     move.l    #0,errormsg
  174.     move.l    d0,asl_base
  175.     move.l    d0,a6
  176.     move.l    #usage,errormsg
  177.     move.l    #ASL_FileRequest,d0
  178.     lea    req_tags,a0
  179.     jsr    _LVOAllocAslRequest(a6)
  180.     tst.l    d0
  181.     beq.w    main.failed
  182.     move.l    d0,req
  183.     move.l    d0,a0
  184.     sub.l    a1,a1
  185.     jsr    _LVOAslRequest(a6)
  186.     tst.l    d0
  187.     beq.w    main.failed
  188.     move.l    req,a1
  189.     move.l    fr_File(a1),a0
  190.     jsr    _strlength
  191.     move.l    d0,d1
  192.     move.l    fr_Drawer(a1),a0
  193.     jsr    _strlength
  194.     add.l    d1,d0
  195.     add.l    #4,d0
  196.     move.l    d0,namelen
  197.     move.l    _SysBase,a6
  198.     move.l    #MEMF_CLEAR,d1
  199.     jsr    _LVOAllocMem(a6)
  200.     tst.l    d0
  201.     beq.w    main.failed
  202.     move.l    d0,namebuf
  203.     move.l    req,a2
  204.     move.l    fr_Drawer(a2),a0
  205.     move.l    namebuf,a1
  206.     jsr    _strlength
  207.     jsr    _bytecopy
  208.     move.l    dos_base,a6
  209.     move.l    a1,d1
  210.     move.l    fr_File(a2),d2
  211.     move.l    namelen,d3
  212.     jsr    _LVOAddPart(a6)
  213.     move.l    namebuf,a0
  214. main.open_it
  215.     move.l    #0,errormsg
  216.     move.l    wb_base,a6
  217.     sub.l    a1,a1
  218.     jsr    _LVOOpenWorkbenchObjectA(a6)
  219.     tst.l    d0
  220.     bne.w    main.done
  221.     move.l    dos_base,a6
  222.     jsr    _LVOIoErr(a6)
  223.     move.l    d0,d1
  224.     move.l    #header,d2
  225.     jsr    _LVOPrintFault(a6)
  226. main.done
  227.     bsr.s    main.freemem
  228. main.rts
  229.     movem.l    (sp)+,d0-a6
  230.     rts
  231.  
  232. main.freemem
  233.     movem.l    d0-d1/a0-a1/a6,-(sp)
  234.     move.l    dos_base,a6
  235.     move.l    rdargs,d1
  236.     jsr    _LVOFreeArgs(a6)
  237.     move.l    #0,rdargs
  238.     move.l    asl_base,a6
  239.     tst.l    a6
  240.     beq.s    main.freemem_rts
  241.     move.l    req,a0
  242.     jsr    _LVOFreeAslRequest(a6)
  243.     move.l    #0,req
  244.     tst.l    namebuf
  245.     beq.s    main.freemem_rts
  246.     move.l    namebuf,a1
  247.     move.l    namelen,d0
  248.     move.l    _SysBase,a6
  249.     jsr    _LVOFreeMem(a6)
  250.     move.l    #0,namebuf
  251. main.freemem_rts
  252.     movem.l    (sp)+,d0-d1/a0-a1/a6
  253.     rts
  254.  
  255. main.failed
  256.     bsr.s    main.freemem
  257.     move.l    #RETURN_ERROR,d0
  258.     bra.s    main.rts
  259.  
  260.  
  261.     section    wbopen_data,data
  262.  
  263. nullstr        macro
  264.         dc.b    \1,0
  265.         even
  266.         endm
  267.  
  268. dos_name    nullstr    "dos.library"
  269. wb_name        nullstr    "workbench.library"
  270. asl_name    nullstr    "asl.library"
  271.  
  272. dos_base    dc.l    0
  273. wb_base        dc.l    0
  274. asl_base    dc.l    0
  275. _SysBase    dc.l    0
  276. thistask    dc.l    0
  277. errormsg    dc.l    0
  278. argarray    dc.l    0
  279. rdargs        dc.l    0
  280. req        dc.l    0
  281. namebuf        dc.l    0
  282. namelen        dc.l    0
  283.  
  284. currentdir    dc.l    0
  285.  
  286. wblib_err    dc.b    "Unable to open workbench.library v44 or higher",10,0
  287. asllib_err    dc.b    "Unable to open asl.library v36 or higher",10,0
  288. argtemplate    nullstr    "NAME/F"
  289.  
  290. usage        dc.b    "WbOpen v1.1 by Alex Gustavsen aka Point/Apathy",10,"Usage: WO <file/drawer/whatever>",10,0
  291.  
  292. req_tags    dc.l    ASLFR_TitleText,req_title
  293.         dc.l    ASLFR_RejectIcons,1
  294.         dc.l    ASLFR_PrivateIDCMP,1
  295.         dc.l    TAG_DONE,0
  296.  
  297. req_title    nullstr    "WBOpen v1.1 © Point/Apathy"
  298. header        nullstr    "Error:"
  299.  
  300.  
  301.